import copy
def lhp_deepcopy2(a:dict,path:str,__b):
    __b=copy.copy(__b)
    path_lst=path.split(".")
    for i in range(len(path_lst)-1):
        if isinstance(a,list):
            a=a[int(path_lst[i])]
        else:
            a=a[path_lst[i]]
    if isinstance(a,list):
        stack=[[int(path_lst[-1])]]#a的路径
    else:
        stack=[[path_lst[-1]]]#a的路径
    # print("stack:",stack)
    while  len(stack):
        a_path=stack.pop(0)
        temp_a=a
        temp_b=__b
        for i in range(len(a_path)-1):
            if isinstance(temp_a,list):
                temp_a=temp_a[int(a_path[i])]
            else:
                temp_a=temp_a[a_path[i]]
        for i in range(1,len(a_path)):
            if isinstance(temp_b,list):
                temp_b=temp_b[int(a_path[i])]
            else:
                temp_b=temp_b[a_path[i]]
        
        last_a_path=a_path[-1]
        if isinstance(temp_a,list):last_a_path=int(last_a_path)
        if isinstance(temp_a,dict):
            #存在这个key
            if last_a_path in temp_a:
                if not isinstance(temp_a[last_a_path],(list,dict)):
                    temp_a[last_a_path]=temp_b
                #判断值是否是字典 是则遍历字典 并且添加进待处理列表中
                if isinstance(temp_b,dict) and isinstance(temp_a[last_a_path],dict):
                    for key in temp_b:
                        stack.append(a_path+[key])
                #判断值是否是列表 是则遍历列表 并且添加进待处理列表中
                elif isinstance(temp_b,list) and isinstance(temp_a[last_a_path],list):
                    for i in range(len(temp_b)):
                        stack.append(a_path+[i])
                #不为列表也不为字典 直接赋值操作
                else:
                    temp_a[last_a_path]=temp_b
            #不存在这个key 直接赋值操作
            else:
                temp_a[last_a_path]=temp_b
        elif isinstance(temp_a,list):
            lenx=len(temp_a)
            #存在这个索引
            if last_a_path<lenx:
                #判断值是否是字典 是则遍历字典 并且添加进待处理列表中
                if isinstance(temp_b,dict):
                    for key in temp_b:
                        stack.append(a_path+[key])
                #判断值是否是列表 是则遍历列表 并且添加进待处理列表中
                elif isinstance(temp_b,list):
                    for i in range(len(temp_b)):
                        stack.append(a_path+[i])
                #不为列表也不为字典 直接赋值操作
                else:
                    temp_a[last_a_path]=temp_b
            
            #不存在这个索引 直接赋值操作
            else:
                temp_a.append(temp_b)
data={}
data["path"]="flow_chat_config.dict.1.dict.3.flow_dict"
data["copy_data"]= { "4": { "tree_type": "1", "tree_from": ["2", "3", "4"]}}
data['data']={
    "flow_chat_config":{
        "dict":{
            "1":{
                "dict":{
                    "3":{
                        "flow_dict":{
                            "3":{},
                            "4":{"tree_type":'0',"tree_from":None}
                        }
                    }
                }
            }
        }
    }
}
lhp_deepcopy2(data['data'],data['path'],data['copy_data'])
print(data['data'])